package br.org.ifrr.controller;

import java.io.Serializable;
import java.util.List;

import javax.faces.bean.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;

import br.org.ifrr.model.Empenho;
import br.org.ifrr.model.Empresa;
import br.org.ifrr.model.Gestor;
import br.org.ifrr.model.Grupo;
import br.org.ifrr.model.Material;
import br.org.ifrr.model.TipoEstado;
import br.org.ifrr.repository.Empenhos;
import br.org.ifrr.repository.Empresas;
import br.org.ifrr.repository.Gestores;
import br.org.ifrr.repository.Grupos;
import br.org.ifrr.repository.Materias;
import br.org.ifrr.service.CadastroMaterialService;
import br.org.ifrr.util.jsf.FacesUtil;

@Named
@ViewScoped
public class CadastroMaterialBean implements Serializable {

	private static final long serialVersionUID = 1L;

	@Inject
	private CadastroMaterialService cadastroMaterialService;

	@Inject
	private Grupos grupos;

	@Inject
	private Gestores gestores;

	@Inject
	private Empenhos empenhos;

	@Inject
	private Empresas empresas;
	
	@Inject
	private Materias materias;

	private Empresa empresa;

	private Gestor gestor;

	private Material material;

	private Grupo grupo;

	private List<Grupo> grupoListados;

	public List<Grupo> getGrupoListados() {
		return grupoListados;
	}

	public CadastroMaterialBean() {
		limpar();
	}

	private void limpar() {
		material = new Material();
	}

	public void salvar() {
		this.material = cadastroMaterialService.salvar(this.material);
		limpar();

		FacesUtil.addInfoMessage("Material salvo com sucesso.");
	}

	public void inicializar() {

		if (FacesUtil.isNotPostback()) {
			grupoListados = grupos.todos();
		}
	}

	public boolean isEditando() {

		return this.material.getId() != null;
	}

	public Material getMaterial() {
		return material;
	}

	public void setMaterial(Material material) {
		this.material = material;
	}

	public Empresa getEmpresa() {
		return empresa;
	}

	public Gestor getGestor() {
		return gestor;
	}

	public Grupo getGrupo() {
		return grupo;
	}

	public TipoEstado[] getTipoEstados() {
		return TipoEstado.values();
	}

	public List<Gestor> completarSetor(String setor) {
		return this.gestores.porSetor(setor);
	}

	public List<Empenho> completarEmpenho(String empenho) {
		return this.empenhos.porEmpenho(empenho);
	}

	public List<Empresa> completarEmpresa(String nome) {
		return this.empresas.porEmpresa(nome);
	}
	
	public List<Grupo> completarGrupo(String grupo) {
		return this.grupos.porGrupao(grupo);
	}
	
	

}
